package com.nyist.myticket.studyTest;

import com.nyist.myticket.baseModelTest.BaseTest;
import com.nyist.myticket.core.utils.GetWeather;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Map;

/**
 * @author yangxiaogen
 * @date 2020/12/29 20:04
 */
public class GetConnect extends BaseTest {

    private static Logger logger = LoggerFactory.getLogger(GetWeather.class);

    @Test
    public void twoGet() {

        int[] nums = {1, 2, 3, 12, 13, 20, 25, 26, 27, 30, 35, 40, 45};
        int target = 20;

        int mid = this.solution(nums, target);
        System.out.println(mid);

    }

    private int solution(int[] nums, int target) {
        int len = nums.length;
        // 当数组的长度为 0 时, 即空数组, 就没有必要进行判定, 肯定不包含target
        if (len == 0) {
            return -1;
        }

        int mid, left = 0, right = len - 1;
        while (left <= right) {

            // 找中位数, 直接取 (right - left) / 2 ,这样在两者相等的时候会出问题的, 所以使用下面这种方式
            // 当出现的数据不是2的倍数的时候,即 7/2 这样的数据的时候, 因为 mid为int的所以会出现直接舍弃后面小数的情况
            mid = left + (right - left) / 2;

            if (nums[mid] == target) {
                // 相等就找到target在数组中的位置, 也就是当前的中位数的索引位置. mid
                return mid;
            } else if (nums[mid] < target) {
                // 当中间位置的数, 还要小于目标值target , 说明比中间数还要小的, 也就是数组的左边部分,全部小于target
                // 那么就将最左边的标识指到中位数的右边一个位置, 舍弃全部的中位数的左边的数据,包含中位数
                left = mid + 1;
            } else if (nums[mid] > target) {
                // 当中间位置的数, 还要大于目标值target , 说明比中间数还要大的, 也就是数组的右边部分,全部大于target
                // 那么就将最右边的标识指到中位数的左边一个位置, 舍弃全部的中位数的右边的数据,包含中位数
                right = mid - 1;
            }

            // 直到 最左边和最右边的值相等, 则说明遍历完成整个数组, 进行最后一次判断, 还不满足条件,说明数组不包含目标值target
        }
        return -1;
    }

    @Test
    public void connectTest() {
        GetWeather getWeather = new GetWeather();
        Map<String, Object> objectMap = getWeather.getConnect("411500");

        logger.info("发送内容为:----\n" + objectMap.toString());
    }

    @Test
    public void numLengthTest() {
        int n = 7/2;
        System.out.println(n);
        System.out.println("=====================================");
        int[] nums = new int[0];
        System.out.println(nums.length);
        System.out.println("=====================================");
        System.out.println(Integer.MAX_VALUE);

    }

}
